﻿using System;
using System.Linq;
using Ext.Net;

namespace IU.Contabilidad.Asiento
{
    /// <summary>
    /// Copiar el código, y modificar solo las funciones indicadas.
    /// Versión: 1
    /// </summary>
    public partial class SelectorAsiento : System.Web.UI.Page
    {
        public const string Id = "SelectorAsiento";

        protected object[] ObtenerDatos()
        {
            return AdministradorGeneral.Administrador.ObtenerListadoAsientos(
                Contabilidad.ContabilidadGlobal.Admin.CodEmpresa, 
                Contabilidad.ContabilidadGlobal.Admin.CodEjercicio);
        }

        #region Do not touch
        /// <summary>
        /// Establece u obtiene el título del elemento.
        /// </summary>
        public new string Title
        {
            get { return this.FormPanel2.Title; }
            set { this.FormPanel2.Title = value; }
        }

        /// <summary>
        /// Establece u obtiene el texto del elemento.
        /// </summary>
        public string Text
        {
            get { return this.ComboBoxClientes.FieldLabel; }
            set { this.ComboBoxClientes.FieldLabel = value; }
        }

        /// <summary>
        /// Página de redirección
        /// </summary>
        public string Pagina
        {
            get { return (string)this.ViewState["page"] ?? ""; }
            set { this.ViewState["page"] = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!X.IsAjaxRequest)
                {
                    string paginas = (string)this.Session[Id];
                    if (string.IsNullOrEmpty(Pagina))
                    {
                        if (paginas.Contains('|'))
                        {
                            Pagina = paginas.Split('|')[0];
                            this.Session[Id] = paginas.Substring(paginas.IndexOf('|'));
                        }
                        else
                        {
                            Pagina = paginas;
                            this.Session[Id] = "";
                        }
                    }
                    CargarDatosEnCombo();
                }
            }

            catch (ExecutionEngineException)
            {
                UIHelper.MostrarError("Error al intentar obtener datos desde el servidor. Por favor, intente nuevamente más tarde.", "Error");
            }
        }

        /// <summary>
        /// Guarda el valor en sesión.
        /// </summary>
        /// <param name="o"></param>
        protected void GuardarValor(object o)
        {
            Session[string.Format("{0}.{1}.Var", Id, Pagina)] = o;
        }

        /// <summary>
        /// Carga los datos de la db en el combobox.
        /// </summary>
        protected void CargarDatosEnCombo()//object[] objetos)
        {
            try
            {
                var objetos = ObtenerDatos();
                if (objetos.Length == 1) // Si hay un solo objeto, seleccionarlo directamente
                {
                    try
                    {
                        GuardarValor((string)((object[])objetos[0])[0]);
                        Response.Redirect(Pagina);
                    }
                    catch
                    {
                        StoreComboCli.DataSource = objetos;
                        StoreComboCli.DataBind();
                    }
                }
                else
                {
                    StoreComboCli.DataSource = objetos;
                    StoreComboCli.DataBind();
                }
            }
            catch (Exception ex)
            {
                UIHelper.MostrarExcepcionSimple(ex, "Error al obtener los registros desde la base de datos.");
            }
        }

        [DirectMethod]
        protected void BotonNext_Click(object sender, DirectEventArgs e)
        {
            if (!ComboBoxClientes.Text.Equals(""))
            {
                GuardarValor(ComboBoxClientes.Text);
                Response.Redirect(Pagina);
            }
            else
            {
                UIHelper.MostrarError("No se ha podido proseguir porque no hay un elemento seleccionado. Por favor, seleccione uno y haga click en siguiente.", "Error");
            }
        }

        #endregion
    }
}
